home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #1 / Amiga Plus CD - 2000 - No. 1.iso / Games / Starter / JST / Developer / sources / src / loaders / Walker / walkerhd.asm < prev    next >
Encoding:
Assembly Source File  |  1999-12-03  |  5.2 KB  |  386 lines

  1. ; *** Walker Hard Disk Loader V1.0
  2. ; *** Written by Jean-François Fabre
  3.  
  4.  
  5.     include    "jst.i"
  6.  
  7.     HD_PARAMS    "",0,0
  8.  
  9. _loader:
  10.     RELOC_MOVEL    D0,trainer
  11.  
  12.     move.l    #$80000,D0
  13.     JSRABS    AllocExtMem
  14.     RELOC_MOVEL    D0,ExtBase
  15.     beq    MemErr
  16.  
  17.     Mac_printf    "Walker HD Loader V1.2"
  18.     Mac_printf    "Coded by Jean-François Fabre © 1997"
  19.  
  20.  
  21.     RELOC_TSTL    trainer
  22.     beq    skip$
  23.  
  24. ;    NEWLINE
  25. ;    Mac_printf    "Trainer activated"
  26. skip$
  27.  
  28.     TESTFILE    bootname
  29.     tst.l    D0
  30.     bne    FileErr
  31.  
  32.     move.l    #6000,D0
  33.     JSRABS    LoadSmallFiles
  34.  
  35.     NEWLINE
  36.     Mac_printf    "Memory used for game:"
  37.     NEWLINE
  38.  
  39.     move.l    ExtBase(pc),D0
  40.     cmp.l    #$80000,D0
  41.     beq    skf$
  42.  
  43.     Mac_printf    "512K of extension mem"
  44.  
  45.     cmp.l    #$200000,D0
  46.     bcs    memok$
  47.  
  48. skf$
  49.     JSRABS    Test1MBChip
  50.     tst.l    D0
  51.     bne    only512$
  52.  
  53.     Mac_printf    "1MB of chipmem"
  54.  
  55.     move.l    ExtBase(pc),D0
  56.     cmp.l    #$80000,D0
  57.     beq    memok$
  58.  
  59.     RELOC_MOVEL    #$80000,SpeechBase
  60.  
  61.     bra    memok$
  62.  
  63. only512$
  64.     Mac_printf    "512K of chipmem"
  65.     
  66. memok$
  67.  
  68.     RELOC_TSTL    SpeechBase
  69.     beq    sksp$
  70.  
  71.     NEWLINE
  72.     Mac_printf    "Speech available"
  73. sksp$
  74.  
  75.     JSRABS    TransfRoutines        ; (relocates ExtBase and SpeechBase)
  76.  
  77.     move.l    #50,D1
  78.     move.l    _DosBase(pc),A6
  79.     JSRLIB    Delay
  80.  
  81.     moveq.l    #0,D0
  82.     move.l    #CACRF_CopyBack,D1
  83.     JSRABS    Degrade
  84.  
  85.     GO_SUPERVISOR
  86.     RELOC_TSTL    SpeechBase
  87.     bne    save1mb$
  88.     SAVE_OSDATA    $80000
  89.     bra    cont$
  90. save1mb$
  91.     SAVE_OSDATA    $100000
  92. cont$
  93.     move.l    ExtBase(pc),D0
  94.     add.l    #$80000,D0
  95.     move.l    D0,A7        ; relocate stack to top of extmem
  96.  
  97.     bsr    PatchBoot
  98.     JSRGEN    FlushCachesHard
  99.  
  100.     move.l    #$11000,D0
  101.     nop
  102.     nop
  103.     jmp    $1A(A1)
  104.     nop
  105.     nop
  106.  
  107. PatchProg:
  108.     ; *** extension mem
  109.  
  110.     move.l    (4,A0),A2
  111.  
  112.     ; *** read file
  113.     
  114.     PATCHUSRJMP    ($51DA,A2),ReadFile
  115.  
  116.     ; *** quit option
  117.  
  118.     PATCHUSRJSR    ($4126,A2),KbInt
  119.  
  120.     ; *** removes a poke in $7C
  121.  
  122.     move.w    #$6004,($18,A2)
  123.  
  124.     ; *** decrunch in fastmem
  125.  
  126.     PATCHUSRJMP    ($61FA,A2),Decrunch
  127.  
  128. ;    move.w    #$4EF9,($631E,A2)
  129. ;    move.l    #EndDec,($6320,A2)
  130.     
  131.     JSRGEN    FlushCachesHard
  132.  
  133.     move.l    (4,A0),A5    ; extbase
  134.     move.l    (8,A0),A2    ; speechbase
  135.     jmp    (A5)
  136.  
  137. CheckF1:
  138.     btst.b    #7,$BFE001
  139.     bne    exit$
  140.  
  141.     movem.l    D1-D2,-(sp)
  142.     move.w    $DFF000+joy1dat,D1
  143.     move.w    D1,D2
  144.     lsr.w    #1,D1
  145.     eor.w    D2,D1
  146.  
  147.     btst    #8,D1
  148.     movem.l    (sp)+,D1-D2
  149.     rts
  150.  
  151. exit$
  152.     move.l    ExtBase(pc),A0
  153.     lea    ($684C,A0),A0
  154.     tst.l    ($50,A0)
  155.     rts
  156.  
  157.  
  158. CheckF3:
  159.     btst.b    #7,$BFE001
  160.     bne    exit$
  161.  
  162.     movem.l    D1-D2,-(sp)
  163.     move.w    $DFF000+joy1dat,D1
  164.     move.w    D1,D2
  165.     lsr.w    #1,D1
  166.     eor.w    D2,D1
  167.  
  168.     btst    #0,D1
  169.     movem.l    (sp)+,D1-D2
  170.     rts
  171.  
  172. exit$
  173.     move.l    ExtBase(pc),A0
  174.     lea    ($684C,A0),A0
  175.     tst.l    ($52,A0)
  176.     rts
  177.  
  178. PatchWalker:
  179.     move.l    ExtBase(pc),A1
  180.  
  181.     GETUSRADDR    Patch60000
  182.     move.l    D0,$76(A1)    ; trap the $60000 call    
  183.     move.b    #$60,$3E(A1)        ; remove cacr related routine
  184.  
  185.     JSRGEN    FlushCachesHard
  186.  
  187.     lea    $80000,A7
  188.     nop
  189.     nop
  190.     jmp    (A1)
  191.     nop
  192.     nop
  193.  
  194.  
  195. PatchBoot:
  196.     move.l    #$10000,A1
  197.     lea    bootname(pc),A0
  198.     moveq    #0,D0
  199.     moveq    #-1,D1
  200.     JSRGEN    ReadFile
  201.  
  202.     ; *** remove disable cache routine
  203.  
  204.     move.w    #$4E75,$E4C(A1)    
  205.  
  206.     ; *** remove memory check routine
  207.  
  208.     move.l    #$70004E75,$C80(A1)    
  209.  
  210.     ; *** change a gotosupervisor routine
  211.  
  212.     PATCHUSRJMP    ($E84,A1),GoSup
  213.  
  214.     ; *** patch read file routine
  215.  
  216.     PATCHUSRJMP    ($F4,A1),ReadFile
  217.  
  218.     ; *** patch fatal error -> exit
  219.  
  220.     PATCHUSRJMP    ($EA,A1),FatalError
  221.     
  222.     ; *** patch loader (walker)
  223.  
  224.     PATCHUSRJMP    ($E4,A1),PatchWalker
  225.  
  226.     rts
  227.  
  228. FatalError:
  229.     JSRGEN    WaitMouse
  230.     JSRGEN    InGameExit
  231.     bra    FatalError
  232.  
  233. GoSup:
  234.     MOVEA.L    #$00DFF000,A6        ;E98: 2C7C00DFF000
  235.     MOVE    #$7FFF,intena(A6)    ;E9E: 3D7C7FFF009A
  236.     MOVE.B    #$7F,$BFED01
  237.     MOVE.B    #$7F,$BFDD00
  238.     MOVE    #$2000,SR
  239.     MOVE    #$03FF,dmacon(A6)
  240.  
  241. ;    MOVE.L    138(A5),D0
  242. ;    ADD.L    162(A5),D0
  243.  
  244.     move.l    ExtBase(pc),$8A(A5)    ; fast or chipmem
  245.     move.l    #$100,$86(A5)
  246. ;    clr.l    $8E(A5)
  247.     move.l    SpeechBase(pc),$8E(A5)    ; chip compulsory, maybe zero
  248.     move.l    #$80000,$A2(A5)        ; ext size
  249.  
  250.     clr.l    $92(A5)
  251.     clr.l    $96(A5)
  252.     clr.l    $AA(A5)
  253.  
  254.     MOVE.L    #$0,4.W
  255.     MOVE    #$0000,168(A6)
  256.     MOVE    #$0000,184(A6)
  257.     MOVE    #$0000,200(A6)
  258.     MOVE    #$0000,216(A6)
  259.     rts
  260.  
  261. ReadFile:
  262.     STORE_REGS
  263.  
  264.     tst.w    D0
  265.     bne    notread$
  266.  
  267.     move.l    A0,A2
  268.     bsr    shortname
  269.  
  270.     moveq    #-1,D1
  271.     JSRGEN    ReadFile
  272.     tst.l    D0
  273.     bne    notfound$
  274.  
  275.     move.l    D0,(A7)        ; error flag
  276.     move.l    D1,4(A7)    ; length
  277.  
  278.     bra    exit$
  279. notread$
  280.     JSRGEN    WaitMouse
  281.  
  282. exit$
  283.     RESTORE_REGS
  284.     rts
  285.  
  286. notfound$
  287.     lea    FileError(pc),A0
  288.     JSRGEN    SetExitRoutine
  289.     JSRGEN    InGameExit
  290.     bra    notfound$
  291.  
  292. shortname:
  293.     
  294. next$
  295.     move.b    (A2)+,D4
  296.     beq    exit$
  297.     cmp.b    #':',D4
  298.     bne    t2$
  299.     move.l    A2,A0        ; advance A0
  300.     bra    next$
  301. t2$
  302.     cmp.b    #'/',D4
  303.     bne    next$
  304.     move.l    A2,A0        ; advance A0
  305.     bra    next$
  306.  
  307. exit$
  308.     rts
  309.  
  310.  
  311. Patch60000:
  312.     PATCHUSRJMP    $615A6,ReadFile
  313.     PATCHUSRJMP    $60F02,PatchProg
  314.  
  315.     move.b    #$60,$6003C
  316.     move.w    #$600A,$60004
  317.  
  318.     move.l    ExtBase(pc),$64FB2
  319.  
  320.     JSRGEN    FlushCachesHard
  321.     JSRGEN    GoECS
  322.  
  323.     ; *** removes (emulates) protection
  324.  
  325.     move.l    #$75CE90E2,D7
  326.     JMP    $60CF6
  327.  
  328. Decrunch:
  329.     JSRGEN    RNCDecrunchEncrypted    
  330. EndDec:
  331.     move.l    A3,-(sp)
  332.  
  333.     ; *** joystick control in menu
  334.  
  335.     move.l    ExtBase(pc),A3
  336.     add.l    #$8000,A3
  337.     cmp.l    #$41FAE29E,($5AC,A3)
  338.     bne    endpatch$
  339.  
  340.     PATCHUSRJSR    ($58A,A3),CheckF1
  341.     move.w    #$4E71,($588,A3)
  342.     PATCHUSRJSR    ($5AE,A3),CheckF3
  343.     move.w    #$4E71,($5AC,A3)
  344. endpatch$
  345.     move.l    (sp)+,A3
  346.  
  347.     JSRGEN    FlushCachesHard    
  348.     rts
  349.  
  350. KbInt:
  351.     move.b    $BFEC01,D0
  352.     move.l    D0,-(sp)
  353.     not.b    D0
  354.     ror.b    #1,D0
  355.     cmp.b    #$59,D0
  356.     bne    noquit$
  357.     JSRGEN    InGameExit
  358. noquit$
  359.     move.l    (sp)+,D0
  360.     rts
  361.  
  362. MemErr:
  363.     Mac_printf    "** Not enough memory to run Walker!"
  364.     JMPABS    CloseAll
  365.  
  366. FileErr:
  367.     Mac_printf    "** File ''boot'' missing."
  368.     JMPABS    CloseAll
  369.  
  370. FileError:
  371.     Mac_printf    "** At least one file is missing. Reinstall game"
  372.     Mac_printf    "   Press RETURN to exit"
  373.     JSRABS    WaitReturn
  374.     JMPABS    CloseAll
  375.  
  376.  
  377. trainer:
  378.     dc.l    0
  379. ExtBase:
  380.     dc.l    0
  381. SpeechBase:
  382.     dc.l    0
  383. bootname:
  384.     dc.b    "boot",0
  385.     even
  386.